![]() | ![]() |
/*-------------------------------------<-- Start of Header -->-------------------------------------\ | Version: 1.0 | | Author: Duo Zhou | | Title: Statistician | | Date: April 15, 2002 | | File Path: C:\Programs\StatSoft\SAS Institute\SAS\MyOwnSetting\sasmacro\GenHeader.sas | |---------------------------------------<-- End of Header -->--------------------------------------| |--------------------------------------------------------------------------------------------------| |-----------------------------------<-- Start of Description -->-----------------------------------| | Purpose: Generate Program Header for Statistics Programs Validation | |------------------------------------<-- End of Description -->------------------------------------| |--------------------------------------------------------------------------------------------------| |-----------------------------------<-- Start of Parameters -->----------------------------------- | | Parameters: | | filename - Program Name | | path - path of the file | | tofile - write the header to the file you just listed as path; Note: the program will | | read the original file, and append a header at front, then write everything | | back. Be careful about this option, it will overwrite the original files. If | | error occurs, the original files will be lost permanently. | | version - Version of the file | | author - Author of the file | | title - Title of the Author | | date - Date of the program | | lib - Libraries defined in the program. Note: different libraries need to be | | defined like this (lib1 c:\temp\ | | lib2 - temp) | | infile - Input Files, including datasets and documents. Note: different type of files | | need to be defined like this (Indata: acedcrf.impl acedcrf.ae | | Infile - temp\temp.doc ...), all subsections separated by the PHI delimiter will be | | starting from a different line | | outfile - Output Files, including datasets and documents Note: this parameter should look | | like the above parameter, comment - Comments, Notes and References Note: the | | parameter should look like the above parameter too | |------------------------------------<-- End of Parameters -->------------------------------------ | |--------------------------------------------------------------------------------------------------| |-------------------------------------<-- Start of Comments -->------------------------------------| | Comments: | | Usage: GenHeader(filename=, path=, tofile=F, version=1.0, author=Duo Zhou, | | title=Statistician, date=, study=, purpose=, macropara=, lib=, infile=, | | outfile=, comment=) | \--------------------------------------<-- End of Comments -->------------------------------------*/ %macro GenHeader(filename=, path=, tofile=F, version=1.0, author=Duo Zhou, title=Statistician, date=(%sysfunc(date(), worddate20.)), study=, purpose=, macropara=(:|:), lib=(|), infile=(|), outfile=(|), comment=(|)); /*---------------------------------------------\ | Copy Right: Duo Zhou; | | Created: 4-14-2001 4:16pm; | | Purpose: Generate Program Headers; | \---------------------------------------------*/ %local linesize _substr1_ _currstr1_ _subscnt1_ _wordsub1_ _lines1_ _substr2_ _currstr2_ _subscnt2_ _wordsub2_ _lines2_ _paraname_ _substr3_ _currstr3_ _subscnt3_ _wordsub3_ _lines3_ _npara_ _parameter_ _nlib_ _libname_ _substr4_ _currstr4_ _subscnt4_ _wordsub4_ _lines4_ _library_ _substr5_ _currstr5_ _subscnt5_ _wordsub5_ _lines5_ _nfile_ _filename_ _filel_ _dlm_ _substr6_ _currstr6_ _subscnt6_ _wordsub6_ _lines6_ _nfilec_ _filecname_ _filec_ _dlmc_ _substr7_ _currstr7_ _subscnt7_ _wordsub7_ _lines7_ _ncomm_ _commcnt_ _commitem_ _dlmcomm_ _tmplast_; %let _tmplast_=&syslast; %let linesize = %SYSFUNC(GETOPTION(linesize)); %let pagesize = %SYSFUNC(GETOPTION(pagesize)); options ls=100 nocenter ps=1024; %if (%length(&path) >3) %then %do; %if (%quote(&path) ne) %then %let path=%sysfunc(dequote(&path)); %if (%quote(&filename) ne) %then %let filename=%sysfunc(dequote(&filename)); %else %if (%quote(&path) ne) %then %let filename=%sysfunc(reverse(%qscan(%quote(%sysfunc(reverse(&path))), 1, %str(\)))); %if (%sysfunc(fileexist(&path))) %then %do; %if (%quote(%upcase(%substr(%quote(&path),%eval(%length(&path)-3),4))) eq %quote(.SAS)) %then %do; %let filepath=%substr(%quote(&path), 1, %eval(%length(&path)-%length(&filename))); filename _pfile_ "&path"; %if (%index(%quote(%upcase(&tofile)), T)) %then %do; DATA _tmp1_; infile _pfile_ length=linelen end=done; length linecontent $ 2000; do while(not done); input @1 linecontent $ varying2000. linelen; output; end; keep linecontent; run; data _null_; file _pfile_; set _tmp1_; %end; %else %do; data _null_; file print; linecontent = ' '; %end; %end; %else %do; %put ==> Alert! Can not find File "&path"!; data _null_; file print; linecontent = ' '; %end; %end; %else %do; %put ==> Alert! File "&filepath" does not exist!; data _null_; file print; linecontent = ' '; %end; %end; %else %do; %put ==> Alert! File "&filepath" does not exist!; data _null_; file print; linecontent = ' '; %end; length str1 str2 $2000.; retain position 14; if _n_=1 then do; put #1 '/*' 37*'-' '<-- Start of Header -->' 37*'-' @100 '\'; %if (%length(&filename) gt 3) %then %do; %let filename=%sysfunc(tranwrd(%nrbquote(&filename), %str(%"), %str(%'))); str1 ="Program: "; str2= trimn(left("&filename")); put '| ' str1 @position str2 @100 '|'; %end; %if (%length(&version) gt 0) %then %do; str1="Version: "; str2=trimn(left("&version")); put '| ' str1 @position str2 @100 '|'; %end; %if (%length(&author) gt 0) %then %do; str1="Author: "; str2=trimn(left("&author")); put '| ' str1 @position str2 @100 '|'; %end; %if (%length(&title) gt 0) %then %do; str1="Title: "; str2=trimn(left("&title")); put '| ' str1 @position str2 @100 '|'; %end; %if (%length(&date) gt 3) %then %do; %let date=%sysfunc(compress(&date, ')(')); str1="Date: "; str2=trimn(left("&date")); put '| ' str1 @position str2 @100 '|'; %end; %if (%length(&study) gt 1) %then %do; str1="Study: "; str2=trimn(left("&study")); put '| ' str1 @position str2 @100 '|'; %end; %if (%length(&path) gt 2) %then %do; str1="File Path: "; %let _lines1_=1; %do %while(%length(&path)>86); %let _substr1_=%substr(%quote(%left(&path)), 1, 86); %if (%quote(%substr(%quote(%left(&path)), 87, 1)) eq %quote(\)) %then %do; %let path=%substr(%quote(%left(&path)), 87, %eval(%length(&path)-86)); %let _currstr1_=&_substr1_; %end; %else %do; %let _currstr1_=; %let _subscnt1_=0; %do %while(%length(%nrbquote(%scan(&_substr1_, %eval(&_subscnt1_+1), %str(\))))); %let _subscnt1_=%eval(&_subscnt1_+1); %let _wordsub1_=%qscan(&_substr1_, &_subscnt1_, %str(\)); %if (%length(%nrbquote(%scan(&_substr1_, %eval(&_subscnt1_+1), %str(\))))) %then %do; %let _currstr1_=%trim(%left(&_currstr1_))%trim(%left(&_wordsub1_))\; %let path=%substr(%quote(%left(&path)), %eval(%length(&_wordsub1_)+2), %eval(%length(&path)-%eval(%length(&_wordsub1_)+1))); %end; %end; %end; str2=trimn(left("&_currstr1_")); %if (&_lines1_ eq 1) %then %do; put '| ' str1 @position str2 @100 '|'; %end; %else %do; put '|' @position str2 @100 '|'; %end; %let _lines1_=%eval(&_lines1_+1); %end; str2=trimn(left("&path")); %if (&_lines1_ eq 1) %then %do; put '| ' str1 @position str2 @100 '|'; %end; %else %do; put '|' @position str2 @100 '|'; %end; %end; put '|' 39*'-' '<-- End of Header -->' 38*'-' @100 '|'; put '|' 98*'-' '|'; %if (%length(%nrbquote(&purpose)) gt 3) %then %do; put '|' 35*'-' '<-- Start of Description -->' 35*'-' @100 '|'; str1="Purpose: "; %if (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&purpose))))), %str(%()) eq 1) and (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(%sysfunc(reverse(%nrbquote(&purpose)))))))), %str(%))) eq 1) %then %do; %if (%sysfunc(rxmatch(%sysfunc(rxparse($(1))),%nrbquote(&purpose))) gt 1) %then %let purpose=%nrbquote(%substr(%nrbquote(&purpose), 2, %eval(%length(%nrbquote(&purpose))-2))); %else %let purpose=%nrbquote(%substr(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&purpose))))), 2, %eval(%length(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&purpose))))))-2))); %end; %if ((%index(%nrbquote(&purpose),%str(%')) and %index(%nrbquote(&purpose),%str(%')<2)) or (%index(%nrbquote(&purpose),%str(%")) and %index(%nrbquote(&purpose),%str(%")) lt 2)) %then %do; %let purpose=%nrbquote(%sysfunc(dequote(&purpose))); %end; %let purpose=%bquote(%sysfunc(tranwrd(%nrbquote(&purpose), %str(%(), %str(À)))); %let purpose=%bquote(%sysfunc(tranwrd(%nrbquote(&purpose), %str(%)), %str(Á)))); %let purpose=%bquote(%sysfunc(tranwrd(%nrbquote(&purpose), %str(%%), %str(Â)))); %let purpose=%bquote(%sysfunc(tranwrd(%nrbquote(&purpose), %str(%'), %str(¸)))); %let purpose=%bquote(%sysfunc(tranwrd(%nrbquote(&purpose), %str(%"), %str(¹)))); %let purpose=%qcmpres(&purpose); %if (%index(%nrbquote(%sysfunc(reverse(%nrbquote(&purpose)))), %str(;)) ne 1) %then %let purpose=&purpose%str(;); %let _lines2_=1; %do %while(%length(&purpose)>86); %let _substr2_=%substr(%quote(%left(%quote(&purpose))), 1, 86); %if (%quote(%substr(%quote(%left(%quote(&purpose))), 87, 1)) eq %quote( )) %then %do; %let purpose=%substr(%quote(%left(%quote(&purpose))), 87, %eval(%length(&purpose)-86)); %let _currstr2_=&_substr2_; %end; %else %do; %let _currstr2_=; %let _subscnt2_=0; %do %while(%length(%quote(%qscan(%quote(&_substr2_), %eval(&_subscnt2_+1), %str( ))))); %let _subscnt2_=%eval(&_subscnt2_+1); %let _wordsub2_=%qscan(%quote(&_substr2_), &_subscnt2_, %str( )); %if (%length(%quote(%qscan(%quote(&_substr2_), %eval(&_subscnt2_+1), %str( ))))) %then %do; %let _currstr2_=%trim(%quote(%left(%quote(&_currstr2_))))%str( )%trim(%quote(%left(%quote(&_wordsub2_)))); %let purpose=%left(%quote(&purpose)); %let purpose=%substr(%quote(&purpose), %eval(%length(&_wordsub2_)+2), %eval(%eval(%length(&purpose)-%length(&_wordsub2_))-1)); %end; %end; %end; str2=trimn(left("&_currstr2_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines2_ eq 1) %then %do; put '| ' str1 @position str2 @100 '|'; %end; %else %do; put '|' @position str2 @100 '|'; %end; %let _lines2_=%eval(&_lines2_+1); %end; str2=trimn(left("&purpose")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines2_ eq 1) %then %do; put '| ' str1 @position str2 @100 '|'; %end; %else %do; put '|' @position str2 @100 '|'; %end; put '|' 36*'-' '<-- End of Description -->' 36*'-' @100 '|'; put '|' 98*'-' '|'; %end; %if (%length(%nrbquote(¯opara)) gt 5) %then %do; put '|' 35*'-' '<-- Start of Parameters -->' 35*'-' @100 '|'; str1="Parameters: "; put '| ' str1 @100 '|'; %if (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(¯opara))))), %str(%()) eq 1) and (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(%sysfunc(reverse(%nrbquote(¯opara)))))))), %str(%))) eq 1) %then %do; %if (%sysfunc(rxmatch(%sysfunc(rxparse($(1))),%nrbquote(¯opara))) gt 1) %then %let macropara=%nrbquote(%substr(%nrbquote(¯opara), 2, %eval(%length(%nrbquote(¯opara))-2))); %else %let macropara=%nrbquote(%substr(%nrbquote(%trim(%nrbquote(%left(%nrbquote(¯opara))))), 2, %eval(%length(%nrbquote(%trim(%nrbquote(%left(%nrbquote(¯opara))))))-2))); %end; %if ((%index(%nrbquote(¯opara),%str(%')) and %index(%nrbquote(¯opara),%str(%')<2)) or (%index(%nrbquote(¯opara),%str(%")) and %index(%nrbquote(¯opara),%str(%")) lt 2)) %then %do; %let macropara=%nrbquote(%sysfunc(dequote(¯opara))); %end; %let macropara=%bquote(%sysfunc(tranwrd(%nrbquote(¯opara), %str(%(), %str(À)))); %let macropara=%bquote(%sysfunc(tranwrd(%nrbquote(¯opara), %str(%)), %str(Á)))); %let macropara=%bquote(%sysfunc(tranwrd(%nrbquote(¯opara), %str(%%), %str(Â)))); %let macropara=%bquote(%sysfunc(tranwrd(%nrbquote(¯opara), %str(%'), %str(¸)))); %let macropara=%bquote(%sysfunc(tranwrd(%nrbquote(¯opara), %str(%"), %str(¹)))); %let macropara=%qcmpres(¯opara); %let _npara_=0; %do %while(%length(%quote(%qscan(%quote(¯opara), %eval(&_npara_+1), %str(|))))); %let _npara_=%eval(&_npara_+1); %let _parameter_=%qscan(%quote(¯opara), &_npara_, %str(|)); %if (%index(%nrbquote(%sysfunc(reverse(%nrbquote(&_parameter_)))), %str(;)) ne 1) %then %let _parameter_=&_parameter_%str(;); %let _paraname_ =%qscan(%quote(&_parameter_), 1 , %str( -:)); %let _parameter_=%left(%quote(%substr(%quote(&_parameter_), %eval(%length(&_paraname_)+2), %eval(%eval(%length(&_parameter_)-%length(&_paraname_))-1)))); %if (%index(%quote(&_parameter_),%str(-)) and %index(%quote(&_parameter_),%str(-)) lt 5) %then %do; %let _parameter_=%left(%quote(%substr(%quote(&_parameter_), %eval(%index(%quote(&_parameter_), %str(-))+2), %eval(%eval(%length(&_parameter_)-%index(%quote(&_parameter_), %str(-)))-1)))); %end; %else %if (%index(%quote(&_parameter_),%str(:)) and %index(%quote(&_parameter_),%str(:)) lt 5) %then %do; %let _parameter_=%left(%quote(%substr(%quote(&_parameter_), %eval(%index(%quote(&_parameter_), %str(:))+2), %eval(%eval(%length(&_parameter_)-%index(%quote(&_parameter_), %str(:)))-1)))); %end; %let _lines3_=1; %do %while(%length(&_parameter_)>79); %let _substr3_=%substr(%quote(%left(%quote(&_parameter_))), 1, 79); %if (%quote(%substr(%quote(%left(%quote(&_parameter_))), 80, 1)) eq %quote( )) %then %do; %let _parameter_=%substr(%quote(%left(%quote(&_parameter_))), 80, %eval(%length(&_parameter_)-79)); %let _currstr3_=&_substr3_; %end; %else %do; %let _currstr3_=; %let _subscnt3_=0; %do %while(%length(%quote(%qscan(%quote(&_substr3_), %eval(&_subscnt3_+1), %str( ))))); %let _subscnt3_=%eval(&_subscnt3_+1); %let _wordsub3_=%qscan(%quote(&_substr3_), &_subscnt3_, %str( )); %if (%length(%quote(%qscan(%quote(&_substr3_), %eval(&_subscnt3_+1), %str( ))))) %then %do; %let _currstr3_=%trim(%quote(%left(%quote(&_currstr3_))))%str( )%trim(%quote(%left(%quote(&_wordsub3_)))); %let _parameter_=%left(%quote(&_parameter_)); %let _parameter_=%substr(%quote(&_parameter_), %eval(%length(&_wordsub3_)+2), %eval(%eval(%length(&_parameter_)-%length(&_wordsub3_))-1)); %end; %end; %end; str2=trimn(left("&_currstr3_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines3_ eq 1) %then %do; put '|' @6 "%trim(%quote(%left(%quote(&_paraname_))))" @17 '-' @19 str2 @100 '|'; %end; %else %do; position2=19; put '|' @position2 str2 @100 '|'; %end; %let _lines3_=%eval(&_lines3_+1); %end; str2=trimn(left("&_parameter_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines3_ eq 1) %then %do; put '|' @6 "%trim(%quote(%left(%quote(&_paraname_))))" @17 '-' @19 str2 @100 '|'; %end; %else %do; position2=19; put '|' @position2 str2 @100 '|'; %end; %end; put '|' 36*'-' '<-- End of Parameters -->' 36*'-' @100 '|'; put '|' 98*'-' '|'; %end; %if (%length(%nrbquote(&lib)) gt 3) %then %do; put '|' 32*'-' '<-- Start of Library References -->' 32*'-' @100 '|'; str1="Library References: "; put '| ' str1 @100 '|'; %if (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&lib))))), %str(%()) eq 1) and (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(%sysfunc(reverse(%nrbquote(&lib)))))))), %str(%))) eq 1) %then %do; %if (%sysfunc(rxmatch(%sysfunc(rxparse($(1))),%nrbquote(&lib))) gt 1) %then %let lib=%nrbquote(%substr(%nrbquote(&lib), 2, %eval(%length(%nrbquote(&lib))-2))); %else %let lib=%nrbquote(%substr(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&lib))))), 2, %eval(%length(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&lib))))))-2))); %end; %if ((%index(%nrbquote(&lib),%str(%')) and %index(%nrbquote(&lib),%str(%')<2)) or (%index(%nrbquote(&lib),%str(%")) and %index(%nrbquote(&lib),%str(%")) lt 2)) %then %do; %let lib=%nrbquote(%sysfunc(dequote(&lib))); %end; %let lib=%bquote(%sysfunc(tranwrd(%nrbquote(&lib), %str(%(), %str(À)))); %let lib=%bquote(%sysfunc(tranwrd(%nrbquote(&lib), %str(%)), %str(Á)))); %let lib=%bquote(%sysfunc(tranwrd(%nrbquote(&lib), %str(%%), %str(Â)))); %let lib=%bquote(%sysfunc(tranwrd(%nrbquote(&lib), %str(%'), %str(¸)))); %let lib=%bquote(%sysfunc(tranwrd(%nrbquote(&lib), %str(%"), %str(¹)))); %let lib=%qcmpres(&lib); %let _nlib_=0; %do %while(%length(%quote(%qscan(%quote(&lib), %eval(&_nlib_+1), %str(|))))); %let _nlib_=%eval(&_nlib_+1); %let _library_=%qscan(%quote(&lib), &_nlib_, %str(|)); %if (%index(%nrbquote(%sysfunc(reverse(%nrbquote(&_library_)))), %str(;)) ne 1) %then %let _library_=&_library_%str(;); %if (%index(%quote(&_library_), %quote(:))) %then %let _libdlm_=%nrbquote(:); %else %if (%index(%quote(&_library_), %quote(%)))) %then %let _libdlm_=%nrbquote()); %else %if (%index(%quote(&_library_), %quote(-))) %then %let _libdlm_=%nrbquote(-); %else %let _libdlm_=%quote( ); %let _libname_ =%qscan(%quote(&_library_), 1 , %nrbquote(&_libdlm_)); %let _libname_=%bquote(%sysfunc(tranwrd(%nrbquote(&_libname_), %str(À), %str(%()))); %let _libname_=%bquote(%sysfunc(tranwrd(%nrbquote(&_libname_), %str(Á), %str(%))))); %let _libname_=%bquote(%sysfunc(tranwrd(%nrbquote(&_libname_), %str(Â), %str(%%)))); %let _libname_=%bquote(%sysfunc(tranwrd(%nrbquote(&_libname_), %str(¸), %str(%')))); %let _libname_=%bquote(%sysfunc(tranwrd(%nrbquote(&_libname_), %str(¹), %str(%")))); %let _library_=%left(%quote(%substr(%quote(&_library_), %eval(%length(&_libname_)+2), %eval(%eval(%length(&_library_)-%length(&_libname_))-1)))); %let _dlm_=; %if (%index(%nrbquote(&lib),%str(\))) %then %do; %let _dlm_=%str(\); %end; %else %let _dlm_=%str(&_dlm_); %let _lines4_=1; %do %while(%length(&_library_)>81); %let _substr4_=%substr(%quote(%left(%quote(&_library_))), 1, 81); %if (%quote(%substr(%quote(%left(%quote(&_library_))), 82, 1)) eq %quote(&_dlm_)) %then %do; %let _library_=%substr(%quote(%left(%quote(&_library_))), 82, %eval(%length(%left(%quote(&_library_)))-81)); %let _currstr4_=&_substr4_; %end; %else %do; %let _currstr4_=; %let _subscnt4_=0; %do %while(%length(%quote(%qscan(%quote(&_substr4_), %eval(&_subscnt4_+1), %str(&_dlm_))))); %let _subscnt4_=%eval(&_subscnt4_+1); %let _wordsub4_=%qscan(%quote(&_substr4_), &_subscnt4_, %str(&_dlm_)); %if (%length(%quote(%qscan(%quote(&_substr4_), %eval(&_subscnt4_+1), %str(&_dlm_))))) %then %do; %if (%quote(&_dlm_) eq %quote(\)) %then %let _currstr4_=%trim(%quote(%left(%quote(&_currstr4_))))%trim(%quote(%left(%quote(&_wordsub4_))))%str(&_dlm_); %else %let _currstr4_=%trim(%quote(%left(%quote(&_currstr4_))))%str(&_dlm_)%trim(%quote(%left(%quote(&_wordsub4_)))); %let _library_=%left(%quote(&_library_)); %let _library_=%substr(%quote(&_library_), %eval(%length(&_wordsub4_)+2), %eval(%eval(%length(&_library_)-%length(&_wordsub4_))-1)); %end; %end; %end; str2=trimn(left("&_currstr4_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines4_ eq 1) %then %do; put '|' @6 "%trim(%quote(%left(%quote(&_libname_))))" @17 '-' @19 str2 @100 '|'; %end; %else %do; position2=19; put '|' @position2 str2 @100 '|'; %end; %let _lines4_=%eval(&_lines4_+1); %end; str2=trimn(left("&_library_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines4_ eq 1) %then %do; put '|' @6 "%trim(%quote(%left(%quote(&_libname_))))" @17 '-' @19 str2 @100 '|'; %end; %else %do; position2=19; put '|' @position2 str2 @100 '|'; %end; /**** Loop 1 ****/ %end; put '|' 33*'-' '<-- End of Library References -->' 32*'-' @100 '|'; put '|' 98*'-' '|'; %end; %if (%length(%nrbquote(&infile)) gt 3) %then %do; put '|' 35*'-' '<-- Start of Files Needed -->' 35*'-' @100 '|'; str1="Files Needed: "; put '| ' str1 @100 '|'; %if (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&infile))))), %str(%()) eq 1) and (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(%sysfunc(reverse(%nrbquote(&infile)))))))), %str(%))) eq 1) %then %do; %if (%sysfunc(rxmatch(%sysfunc(rxparse($(1))),%nrbquote(&infile))) gt 1) %then %let infile=%nrbquote(%substr(%nrbquote(&infile), 2, %eval(%length(%nrbquote(&infile))-2))); %else %let infile=%nrbquote(%substr(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&infile))))), 2, %eval(%length(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&infile))))))-2))); %end; %if ((%index(%nrbquote(&infile),%str(%')) and %index(%nrbquote(&infile),%str(%')<2)) or (%index(%nrbquote(&infile),%str(%")) and %index(%nrbquote(&infile),%str(%")) lt 2)) %then %do; %let infile=%nrbquote(%sysfunc(dequote(&infile))); %end; %let infile=%bquote(%sysfunc(tranwrd(%nrbquote(&infile), %str(%(), %str(À)))); %let infile=%bquote(%sysfunc(tranwrd(%nrbquote(&infile), %str(%)), %str(Á)))); %let infile=%bquote(%sysfunc(tranwrd(%nrbquote(&infile), %str(%%), %str(Â)))); %let infile=%bquote(%sysfunc(tranwrd(%nrbquote(&infile), %str(%'), %str(¸)))); %let infile=%bquote(%sysfunc(tranwrd(%nrbquote(&infile), %str(%"), %str(¹)))); %let infile=%qcmpres(&infile); %let _nfile_=0; %do %while(%length(%qscan(%quote(&infile), %eval(&_nfile_+1), %str(|)))); %let _nfile_=%eval(&_nfile_+1); %let _filel_=%qscan(%quote(&infile), &_nfile_, %str(|)); %if (%index(%nrbquote(%sysfunc(reverse(%nrbquote(&_filel_)))), %str(;)) ne 1) %then %let _filel_=&_filel_%str(;); %let _slashposl_=%index(%nrbquote(&_filel_),%str(\)); %if (&_slashposl_ ge 1) %then %do; %if (&_slashposl_ ge 93) %then %let _dlml_=%quote(\ ); %else %let _dlml_=%quote(\); %end; %else %let _dlml_=%str( ); %let _lines5_=1; %do %while(%length(&_filel_)>93); %let _substr5_=%substr(%quote(%left(%quote(&_filel_))), 1, 93); %if (%quote(%substr(%quote(%left(%quote(&_filel_))), 94, 1)) eq %quote(&_dlm_)) %then %do; %let _filel_=%substr(%quote(%left(%quote(&_filel_))), 94, %eval(%length(%left(%quote(&_filel_)))-93)); %let _currstr5_=&_substr5_; %end; %else %do; %let _currstr5_=; %let _subscnt5_=0; %do %while(%length(%qscan(%quote(&_substr5_), %eval(&_subscnt5_+1), %str(&_dlml_)))); %let _subscnt5_=%eval(&_subscnt5_+1); %let _wordsub5_=%qscan(%quote(&_substr5_), &_subscnt5_, %str(&_dlml_)); %if (%length(%quote(%qscan(%quote(&_substr5_), %eval(&_subscnt5_+1), %str(&_dlml_))))) %then %do; %if (%index(%nrbquote(&_dlml_),%str(\))) and (&_slashposl_ lt 93) %then %let _currstr5_=%trim(%quote(%left(%quote(&_currstr5_))))%trim(%quote(%left(%quote(&_wordsub5_))))\; %else %if (%index(%nrbquote(&_dlml_),%str(\))) and ((%length(%trim(%quote(%left(%quote(&_currstr5_)))))<&_slashposl_) and (&_slashposl_>=93)) %then %let _currstr5_=%trim(%quote(%left(%quote(&_currstr5_)))) %trim(%quote(%left(%quote(&_wordsub5_)))); %else %if (%index(%nrbquote(&_dlml_),%str(\))) and ((%length(%trim(%quote(%left(%quote(&_currstr5_)))))>=&_slashposl_) and (&_slashposl_>=93)) %then %let _currstr5_=%trim(%quote(%left(%quote(&_currstr5_))))%trim(%quote(%left(%quote(&_wordsub5_))))\; %else %let _currstr5_=%trim(%quote(%left(%quote(&_currstr5_))))%str(&_dlml_)%trim(%quote(%left(%quote(&_wordsub5_)))); %let _filel_=%left(%quote(&_filel_)); %let _filel_=%substr(%quote(&_filel_), %eval(%length(&_wordsub5_)+2), %eval(%eval(%length(&_filel_)-%length(&_wordsub5_))-1)); %end; %end; %end; str2=trimn(left("&_currstr5_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines5_ eq 1) %then %do; put '|' @6 str2 @100 '|'; %end; %else %do; put '|' @6 str2 @100 '|'; %end; %let _lines5_=%eval(&_lines5_+1); %end; str2=trimn(left("&_filel_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines5_ eq 1) %then %do; put '|' @6 str2 @100 '|'; %end; %else %do; put '|' @6 str2 @100 '|'; %end; %if (%length(%qscan(%quote(&infile), %eval(&_nfile_+1), %str(|)))) %then %do; put '|' 98*' ' '|'; %end; %end; put '|' 36*'-' '<-- End of Files Needed -->' 35*'-' @100 '|'; put '|' 98*'-' '|'; %end; %if (%length(%nrbquote(&outfile)) gt 3) %then %do; put '|' 35*'-' '<-- Start of Files Created -->' 34*'-' @100 '|'; str1="Files Created: "; put '| ' str1 @100 '|'; %if (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&outfile))))), %str(%()) eq 1) and (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(%sysfunc(reverse(%nrbquote(&outfile)))))))), %str(%))) eq 1) %then %do; %if (%sysfunc(rxmatch(%sysfunc(rxparse($(1))),%nrbquote(&outfile))) gt 1) %then %let outfile=%nrbquote(%substr(%nrbquote(&outfile), 2, %eval(%length(%nrbquote(&outfile))-2))); %else %let outfile=%nrbquote(%substr(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&outfile))))), 2, %eval(%length(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&outfile))))))-2))); %end; %if ((%index(%nrbquote(&outfile),%str(%')) and %index(%nrbquote(&outfile),%str(%')<2)) or (%index(%nrbquote(&outfile),%str(%")) and %index(%nrbquote(&outfile),%str(%")) lt 2)) %then %do; %let outfile=%nrbquote(%sysfunc(dequote(&outfile))); %end; %let outfile=%bquote(%sysfunc(tranwrd(%nrbquote(&outfile), %str(%(), %str(À)))); %let outfile=%bquote(%sysfunc(tranwrd(%nrbquote(&outfile), %str(%)), %str(Á)))); %let outfile=%bquote(%sysfunc(tranwrd(%nrbquote(&outfile), %str(%%), %str(Â)))); %let outfile=%bquote(%sysfunc(tranwrd(%nrbquote(&outfile), %str(%'), %str(¸)))); %let outfile=%bquote(%sysfunc(tranwrd(%nrbquote(&outfile), %str(%"), %str(¹)))); %let outfile=%qcmpres(&outfile); %let _nfilec_=0; %do %while(%length(%qscan(%quote(&outfile), %eval(&_nfilec_+1), %str(|)))); %let _nfilec_=%eval(&_nfilec_+1); %let _filec_=%qscan(%quote(&outfile), &_nfilec_, %str(|)); %if (%index(%nrbquote(%sysfunc(reverse(%nrbquote(&_filec_)))), %str(;)) ne 1) %then %let _filec_=&_filec_%str(;); %let _slashposc_=%index(%nrbquote(&_filec_),%str(\)); %if (&_slashposc_ ge 1) %then %do; %if (&_slashposc_ ge 93) %then %let _dlmc_=%quote(\ ); %else %let _dlmc_=%quote(\); %end; %else %let _dlmc_=%quote( ); %let _lines6_=1; %do %while(%length(&_filec_)>93); %let _substr6_=%substr(%quote(%left(%quote(&_filec_))), 1, 93); %if (%quote(%substr(%quote(%left(%quote(&_filec_))), 94, 1)) eq %quote(&_dlmc_)) %then %do; %let _filec_=%substr(%quote(%left(%quote(&_filec_))), 94, %eval(%length(%left(%quote(&_filec_)))-93)); %let _currstr6_=&_substr6_; %end; %else %do; %let _currstr6_=; %let _subscnt6_=0; %do %while(%length(%qscan(%quote(&_substr6_), %eval(&_subscnt6_+1), %str(&_dlmc_)))); %let _subscnt6_=%eval(&_subscnt6_+1); %let _wordsub6_=%qscan(%quote(&_substr6_), &_subscnt6_, %str(&_dlmc_)); %if (%length(%quote(%qscan(%quote(&_substr6_), %eval(&_subscnt6_+1), %str(&_dlmc_))))) %then %do; %if (%index(%nrbquote(&_dlmc_),%str(\))) and (&_slashposc_ lt 93) %then %let _currstr6_=%trim(%quote(%left(%quote(&_currstr6_))))%trim(%quote(%left(%quote(&_wordsub6_))))\; %else %if (%index(%nrbquote(&_dlmc_),%str(\))) and ((%length(%trim(%quote(%left(%quote(&_currstr6_)))))<&_slashposc_) and (&_slashposc_>=93)) %then %let _currstr6_=%trim(%quote(%left(%quote(&_currstr6_)))) %trim(%quote(%left(%quote(&_wordsub6_)))); %else %if (%index(%nrbquote(&_dlmc_),%str(\))) and ((%length(%trim(%quote(%left(%quote(&_currstr6_)))))>=&_slashposc_) and (&_slashposc_>=93)) %then %let _currstr6_=%trim(%quote(%left(%quote(&_currstr6_))))%trim(%quote(%left(%quote(&_wordsub6_))))\; %else %let _currstr6_=%trim(%quote(%left(%quote(&_currstr6_))))%str(&_dlmc_)%trim(%quote(%left(%quote(&_wordsub6_)))); %let _filec_=%left(%quote(&_filec_)); %let _filec_=%substr(%quote(&_filec_), %eval(%length(&_wordsub6_)+2), %eval(%eval(%length(&_filec_)-%length(&_wordsub6_))-1)); %end; %end; %end; str2=trimn(left("&_currstr6_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines6_ eq 1) %then %do; put '|' @6 str2 @100 '|'; %end; %else %do; put '|' @6 str2 @100 '|'; %end; %let _lines6_=%eval(&_lines6_+1); %end; str2=trimn(left("&_filec_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines6_ eq 1) %then %do; put '|' @6 str2 @100 '|'; %end; %else %do; put '|' @6 str2 @100 '|'; %end; %if (%length(%qscan(%quote(&outfile), %eval(&_nfilec_+1), %str(|)))) %then %do; put '|' 98*' ' '|'; %end; %end; put '|' 36*'-' '<-- End of Files Created -->' 35*'-' @100 '|'; put '|' 98*'-' '|'; %end; %if (%length(%nrbquote(&comment)) gt 3) %then %do; put '|' 37*'-' '<-- Start of Comments -->' 37*'-' @100 '|'; str1="Comments: "; put '| ' str1 @100 '|'; %if (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&comment))))), %str(%()) eq 1) and (%index(%nrbquote(%trim(%nrbquote(%left(%nrbquote(%sysfunc(reverse(%nrbquote(&comment)))))))), %str(%))) eq 1) %then %do; %if (%sysfunc(rxmatch(%sysfunc(rxparse($(1))),%nrbquote(&comment))) gt 1) %then %let comment=%nrbquote(%substr(%nrbquote(&comment), 2, %eval(%length(%nrbquote(&comment))-2))); %else %let comment=%nrbquote(%substr(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&comment))))), 2, %eval(%length(%nrbquote(%trim(%nrbquote(%left(%nrbquote(&comment))))))-2))); %end; %if ((%index(%nrbquote(&comment),%str(%')) and %index(%nrbquote(&comment),%str(%')<2)) or (%index(%nrbquote(&comment),%str(%")) and %index(%nrbquote(&comment),%str(%")) lt 2)) %then %do; %let comment=%nrbquote(%sysfunc(dequote(&comment))); %end; %let comment=%bquote(%sysfunc(tranwrd(%nrbquote(&comment), %str(%(), %str(À)))); %let comment=%bquote(%sysfunc(tranwrd(%nrbquote(&comment), %str(%)), %str(Á)))); %let comment=%bquote(%sysfunc(tranwrd(%nrbquote(&comment), %str(%%), %str(Â)))); %let comment=%bquote(%sysfunc(tranwrd(%nrbquote(&comment), %str(%'), %str(¸)))); %let comment=%bquote(%sysfunc(tranwrd(%nrbquote(&comment), %str(%"), %str(¹)))); %let comment=%qcmpres(&comment); %let _ncomm_=0; %do %while(%length(%qscan(%quote(&comment), %eval(&_ncomm_+1), %str(|)))); %let _ncomm_=%eval(&_ncomm_+1); %let _commitem_=%qscan(%quote(&comment), &_ncomm_, %str(|)); %if (%index(%nrbquote(%sysfunc(reverse(%nrbquote(&_commitem_)))), %str(;)) ne 1) %then %let _commitem_=&_commitem_%str(;); /*******loop 1 ******/ %if (%index(%nrbquote(&_commitem_),%str(\))) %then %do; %let _dlmcomm_=%str(\); %end; %else %let _dlmcomm_=%str( ); %let _lines7_=1; %do %while(%length(&_commitem_)>93); %let _substr7_=%substr(%quote(%left(%quote(&_commitem_))), 1, 93); %if (%quote(%substr(%quote(%left(%quote(&_commitem_))), 94, 1)) eq %quote(&_dlmcomm_)) %then %do; %let _commitem_=%substr(%quote(%left(%quote(&_commitem_))), 94, %eval(%length(%left(%quote(&_commitem_)))-93)); %let _currstr7_=&_substr7_; %end; %else %do; %let _currstr7_=; %let _subscnt7_=0; %do %while(%length(%qscan(%quote(&_substr7_), %eval(&_subscnt7_+1), %str(&_dlmcomm_)))); %let _subscnt7_=%eval(&_subscnt7_+1); %let _wordsub7_=%qscan(%quote(&_substr7_), &_subscnt7_, %str(&_dlmcomm_)); %if (%length(%quote(%qscan(%quote(&_substr7_), %eval(&_subscnt7_+1), %str(&_dlmcomm_))))) %then %do; %if (%quote(&_dlmcomm_) eq %quote(\)) %then %let _currstr7_=%trim(%quote(%left(%quote(&_currstr7_))))%trim(%quote(%left(%quote(&_wordsub7_))))%str(&_dlmcomm_); %else %let _currstr7_=%trim(%quote(%left(%quote(&_currstr7_))))%str(&_dlmcomm_)%trim(%quote(%left(%quote(&_wordsub7_)))); %let _commitem_=%left(%quote(&_commitem_)); %let _commitem_=%substr(%quote(&_commitem_), %eval(%length(&_wordsub7_)+2), %eval(%eval(%length(&_commitem_)-%length(&_wordsub7_))-1)); %end; %end; %end; str2=trimn(left("&_currstr7_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines7_ eq 1) %then %do; put '|' @6 str2 @100 '|'; %end; %else %do; put '|' @6 str2 @100 '|'; %end; %let _lines7_=%eval(&_lines7_+1); %end; str2=trimn(left("&_commitem_")); str2=tranwrd(str2, '¸', "'"); str2=tranwrd(str2, '¹', '"'); str2=tranwrd(str2, 'Â', '%'); str2=tranwrd(str2, 'À', '('); str2=tranwrd(str2, 'Á', ')'); %if (&_lines7_ eq 1) %then %do; put '|' @6 str2 @100 '|'; %end; %else %do; put '|' @6 str2 @100 '|'; %end; %if (%length(%qscan(%quote(&comment), %eval(&_ncomm_+1), %str(|)))) %then %do; put '|' 98*' ' '|'; %end; %end; put '\' 38*'-' '<-- End of Comments -->' 37*'-' @99 '*/'; %end; end; if linecontent ne ' ' then do; atposition=length(linecontent)-length(trimn(left(linecontent))); put @atposition linecontent; end; run; %if (%index(%quote(%upcase(&tofile)), T)) %then %do; proc datasets library=work nolist; delete _tmp1_; run;quit; %end; %let syslast=&_tmplast_; options ls=&linesize ps=&pagesize; %mend GenHeader;